import { useState, useEffect } from 'react';

type UseTimeoutReturnType = [boolean, () => void, () => void];

export function useTimeout(TIMEOUT_SECONDS: number): UseTimeoutReturnType {
    const [isTimeout, setIsTimeout] = useState(false);
    const [startTime, setStartTime] = useState<number | null>(null);

    useEffect(() => {
        let timeoutId: NodeJS.Timeout | null = null;
        if (startTime) {
            timeoutId = setTimeout(() => {
                setIsTimeout(true);
            }, TIMEOUT_SECONDS * 1000 - (Date.now() - startTime));
        }
        return () => {
            if (timeoutId) {
                clearTimeout(timeoutId);
            }
        };
    }, [startTime, TIMEOUT_SECONDS]);

    function startTimer() {
        setStartTime(Date.now());
    }

    function resetTimer() {
        setIsTimeout(false);
        setStartTime(null);
    }

    return [isTimeout, startTimer, resetTimer];
}